from django import forms
from app01 import models
#forms组件，校验用户输入
class MyRegForm(forms.Form):
    username = forms.CharField(
        max_length=12,
        min_length=3,
        label='用户名',
        error_messages={
            'min_length':'长度不能低于3',
            'max_length':'长度不能大于12',
            'required':'用户名不能为空'
        },
        widget=forms.TextInput(attrs={'class':'form-control'})

    )
    password = forms.CharField(
        max_length=12,
        min_length=3,
        label='密码',
        error_messages={
            'min_length':'长度不能低于8',
            'max_length':'长度不能高于15',
            'required': '密码不能为空'
        },
        widget=forms.PasswordInput(attrs={'class':'form-control'})

    )
    confirm_password=forms.CharField(
        max_length=12,
        min_length=3,
        label='确认密码',
        error_messages={
            'min_length':'长度不能低于8',
            'max_length':'长度不能高于15',
            'required': '密码不能为空'
        },
        widget=forms.PasswordInput(attrs={'class':'form-control'})

    )
    email = forms.EmailField(
        label='邮箱',
        error_messages={
            'required': '密码不能为空',
            'invalid':'邮箱格式不正确'},
        widget=forms.EmailInput(attrs={'class':'form-control'})
                             )
    #钩子函数，
    #局部钩子校验用户名是否已经存在
    def clean_username(self):
        username = self.cleaned_data.get('username')
        #去数据库中校验，用户表是我们自己扩展后的表。
        is_exist = models.UserInfo.objects.filter(username=username).first()
        if is_exist:
            self.add_error('username','该用户已经注册过了！！')
        elif username[:3]=='512' or username[:3]=='312' :

            #拿了username要返回username
            return username
        else:
            self.add_error('username', '非本校学生职工无法注册。')

    #全局钩子校验两次密码是否一样
    def clean(self):
        #拿到已经满足第一次校验的数据从cleaned_data中获取
        password = self.cleaned_data.get('password')
        confirm_password=self.cleaned_data.get('confirm_password')
        if password != confirm_password:
            self.add_error('confirm_password','密码不一致')
        #全局钩子将所有拿到的数据都返回回去。
        return self.cleaned_data




